<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Hello React</title>
  <!-- 
  React 是一个由 Facebook 开发的开源 JavaScript 库，用于构建用户界面，特别是用于单页应用（SPA）。以下是对 React 的介绍和总结：
  1. 基本概念
  - 组件化：React 的核心思想是将 UI 拆分成独立的、可重用的组件。每个组件都有自己的状态和属性，可以独立管理和更新。
  - 虚拟 DOM：React 使用虚拟 DOM 来提高性能。每当组件的状态发生变化时，React 会首先在虚拟 DOM 中进行更新，然后与实际 DOM 进行比较，最后只将需要更新的部分渲染到真实 DOM 中。

  2. 核心特性
  - 声明式编程：React 采用声明式编程风格，开发者只需描述 UI 应该是什么样子，React 会负责渲染和更新。
  - 单向数据流：数据在 React 中是单向流动的，父组件将数据通过 props 传递给子组件，确保数据的可预测性和易于调试。
  - Hooks：React 16.8 引入了 Hooks，允许在函数组件中使用状态和其他 React 特性，使得函数组件更加强大和灵活。

  3. 生态系统
  - React Router：用于管理应用的路由，支持单页应用的导航。
  - Redux：用于管理应用的全局状态，适用于复杂的状态管理。
  - Context API：允许在组件树中共享数据，而无需手动通过每个组件传递 props。

  4. 开发工具
  - Create React App：一个官方支持的工具，帮助开发者快速搭建 React 项目环境。
  - React DevTools：一个浏览器扩展，提供组件树的可视化，方便调试和性能分析。

  5. 应用场景
  - 单页应用（SPA）：React 非常适合用于构建动态的单页应用，提供流畅的用户体验。
  - 移动应用：通过 React Native，开发者可以使用 React 构建跨平台的移动应用。

  总结
  React 是一个强大且灵活的 JavaScript 库，适用于构建现代用户界面。它的组件化、虚拟 DOM 和声明式编程使得开发者能够高效地构建和管理复杂的 UI。通过丰富的生态系统和工具支持，React 在前端开发中得到了广泛的应用和认可。理解 React 的核心概念和特性对于开发高性能的 Web 应用至关重要。
  -->
</head>
<body>

  <div id="root"></div>
  <div id="app"></div>
  
  <!-- 添加依赖 -->
  <!-- 依赖三个包 -->
  <!-- CDN引入 -->
  <script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
  <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script> 
  <!-- babel -->
  <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>

  <!-- 下载引入 -->

  <!-- npm下载引入(脚手架) -->

  <script type="text/babel">
    // 编写React代码(jsx语法)
    // jsx语法 -> 普通的JavaScript代码 -> babel

    // 渲染Hello World
    // React18之前: ReactDOM.render
    // ReactDOM.render(<h2>Hello World</h2>, document.querySelector("#root"))

    // React18之后:
    const root = ReactDOM.createRoot(document.querySelector("#root"))
    root.render(<h2>Hello World</h2>)

    // const app = ReactDOM.createRoot(document.querySelector("#app"))
    // app.render(<h2>你好啊, 李银河</h2>)

  </script>

</body>
</html>